package com.tangxz.generate_code.pojo;

import com.tangxz.generate_code.util.ResourceUtil;
import com.tangxz.generate_code.util.TemplateUtil;
import freemarker.template.Configuration;
import lombok.extern.slf4j.Slf4j;

import java.io.File;
import java.util.List;
import java.util.ResourceBundle;


@Slf4j
public class TemplateVo {
    private Configuration configuration;
    private String projectPath;
    private String bussiPackage;
    private File templateRootDir;
    private String sourceRootPackage;
    private List<File> templates;

    public TemplateVo(String configPath) {
        ResourceBundle configResource = ResourceUtil.loadResource(configPath);
        if (configResource == null) {
            log.debug("通过class目录加载配置文件 " + configPath);
            configResource = ResourceBundle.getBundle(configPath);
        }
        //注入配置文件配置
        projectPath = configResource.getString("project_path");
        bussiPackage = configResource.getString("bussi_package");
        sourceRootPackage = configResource.getString("source_root_package");
        String templateRootDirPath = configResource.getString("template_root_dir");
        //初始化Configuration
        if (templateRootDir == null) {
            templateRootDir = new File(this.getClass().getResource(templateRootDirPath).getFile());
        }
        configuration = TemplateUtil.getConfiguration(templateRootDir);
        log.info("--- 得到模板根目录下的所有符合要求的模板文件");
        templates = TemplateUtil.getTemplateFiles(templateRootDir);
    }

    /**
     * 在选中的目录下生成文件，模板生成后的绝对位置为 C:\\Users\\Administrator\\Desktop\\generate-code\\src/main/java/com/tangxz/module
     * @param projectPath  项目绝对地址  C:\\\\Users\\\\Administrator\\\\Desktop\\\\generate-code
     * @param bussiPackage  包名  com.tangxz.module
     * @param templateRootDirPath  模板根目录  /tangxz/code-template/one
     * @param sourceRootPackage  类文件路径  src/main/java
     */
    public TemplateVo(String projectPath, String bussiPackage, String templateRootDirPath, String sourceRootPackage) {
        this.projectPath = projectPath;
        this.bussiPackage = bussiPackage;
        this.sourceRootPackage = sourceRootPackage;
        //初始化Configuration
        templateRootDir = new File(this.getClass().getResource(templateRootDirPath).getFile());
        configuration = TemplateUtil.getConfiguration(templateRootDir);
        log.info("--- 得到模板根目录下的所有符合要求的模板文件");
        templates = TemplateUtil.getTemplateFiles(templateRootDir);
    }

    /**
     * 在当前项目中生成模板
     * @param bussiPackage  包名  com.tangxz.module
     * @param templateRootDirPath 模板根目录  /tangxz/code-template/one
     * @param sourceRootPackage 类文件路径  src/main/java
     */
    public TemplateVo(String bussiPackage, String templateRootDirPath, String sourceRootPackage) {
        this.bussiPackage = bussiPackage;
        this.sourceRootPackage = sourceRootPackage;
        //初始化模板根目录下所有的模板
        templateRootDir = new File(this.getClass().getResource(templateRootDirPath).getFile());
        configuration = TemplateUtil.getConfiguration(templateRootDir);
        log.info("--- 得到模板根目录下的所有符合要求的模板文件");
        templates = TemplateUtil.getTemplateFiles(templateRootDir);
    }

    public String getProjectPath() {
        return projectPath;
    }

    public String getBussiPackage() {
        return bussiPackage;
    }

    public File getTemplateRootDir() {
        return templateRootDir;
    }

    public String getSourceRootPackage() {
        return sourceRootPackage;
    }

    public Configuration getConfiguration() {
        return configuration;
    }

    public List<File> getTemplates() {
        return templates;
    }

    public void setTemplates(List<File> templates) {
        this.templates = templates;
    }
}
